package top.zhangjianyong.tools.service.mybatis.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import top.zhangjianyong.tools.entity.ETF;
import top.zhangjianyong.tools.mapper.ETFMapper;
import top.zhangjianyong.tools.service.mybatis.IETFService;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author ： zhangjianyong
 * @date ： 2022/11/28 9:23 AM
 */
@Service
public class IETFServiceImpl extends ServiceImpl<ETFMapper, ETF> implements IETFService {

    @Override
    public ETF getByCode(String code) {
        return lambdaQuery().eq(ETF::getCode, code)
                .one();
    }

    @Override
    public boolean existUpdateFail(int times) {
        return lambdaQuery().ge(ETF::getUpdateFlag, times).count() > 0;
    }

    @Override
    public boolean setHoldFlag(String code, Integer flag) {
        return lambdaUpdate().eq(ETF::getCode, code)
                .set(ETF::getHoldFlag, flag)
                .update();
    }

    @Override
    public boolean setUpdateFlag(String code, int i) {
        return lambdaUpdate().eq(ETF::getCode, code)
                .set(ETF::getUpdateFlag, i)
                .update();
    }

    @Override
    public boolean addUpdateFlag(String code) {
        ETF one = lambdaQuery().eq(ETF::getCode, code)
                .one();
        Integer updateFlag = one.getUpdateFlag();
        updateFlag = updateFlag == null ? 1 : updateFlag + 1;
        return setUpdateFlag(code, updateFlag);
    }

    @Override
    public List<ETF> listNotDel() {
        return lambdaQuery().eq(ETF::getDelFlag, 0).list();
    }

    @Override
    public boolean resetHold() {
        return baseMapper.resetHold();
        //return lambdaUpdate().set(ETF::getHoldFlag, 0).update();
    }

    @Override
    public boolean update3DownRate(String code, BigDecimal rate) {
        return lambdaUpdate().eq(ETF::getCode, code)
                .set(ETF::getDwon3Rate, rate)
                .update();
    }

    @Override
    public boolean removeByCode(String code) {
        return lambdaUpdate()
                .eq(ETF::getCode, code)
                .set(ETF::getDelFlag, 1)
                .update();
    }
}
